package cn.jingyuan.owl.enums.core;

public interface EnumString extends EnumCore<String> {

    /**
     * 查找 enumClass 对应 value 的 Enum
     *
     * @param value 枚举值
     * @param enumClass 枚举类
     * @param <E> value 的类型
     *
     * @return 枚举
     */
    static <E extends Enum<?> & EnumString> E valueOf(String value, Class<E> enumClass) {
        return valueOf(value, enumClass, false);
    }

    /**
     * 查找 enumClass 对应 value 的 Enum
     *
     * @param value 枚举值
     * @param enumClass 枚举类
     * @param ignoreCase 忽略值的大小写
     * @param <E> value 的枚举类型
     *
     * @return 枚举
     */
    static <E extends Enum<?> & EnumString> E valueOf(String value, Class<E> enumClass, boolean ignoreCase) {
        if ((null == value) || (null == enumClass)) {
            return null;
        }

        E[] values = enumClass.getEnumConstants();
        for (E item : values) {
            if (ignoreCase) {
                if (item.getCode().equalsIgnoreCase(value)) {
                    return item;
                }
            } else {
                if (item.getCode().equals(value)) {
                    return item;
                }
            }
        }

        return null;
    }

}
